package excercise;

public class EX04_OOP {

	// 자릿수 구분 문자 _
	// 정수 리터럴이 너무 길면 가독성에 문제 있음
	// JDK 7에 새롭게 추가된 기능 중 하나는
	// 3 자릿수마다 _ 를 사용할 수 있게 한 것
	
	// 클래스에 사용되는 변수의 종류
	// 멤버member 변수
	//       -> class 블록내 선언한 변수
	//       -> 해당 클래스를 통해서만 사용가능한 변수
	
	// 인스턴스instance/object 변수
	//      -> 객체를 가리키는 변수를 의미
	//      -> 클래스와 new 연산자로 구성된 문장을
	//           실행했을때의 결과물
	
	// 생성자constructor
	// 생성자는 객체를 생성하는 데 사용하는 특별한 메서드
	// 모든 클래스는 하나 이상의 생성자가 있어야 함
	// 설령, 메서드를 작성하지 않았더라도
	// 컴파일러가 자동으로 만들어서 넣어줌
	// 생성자는 일반 메서드와는 달리
	// void 나 return 을 사용하지 않음
	// 생성자 이름은 클래스이름과 동일해야 함
	
	
	public static void main(String[] args) {
		Retangle rRed = new Retangle();
		rRed.width = 4;
		rRed.height = 40;
		rRed.color = "red";
		
		Retangle rOrange = new Retangle();
		rOrange.width = 3.5F;
		rOrange.height = 35.9F;
		rOrange.color = "orange";
		
		System.out.println( rRed );
		System.out.println( rRed.width );
		System.out.println( rRed.height );
		System.out.println( rRed.color );
		System.out.println( rRed.getArea() );
		System.out.println( rRed.getPerimeter() );
		
		Fan f1 = new Fan();
		f1.speed = f1.FAST;	// 최고속도
		f1.on = true;				// 동작중
		f1.radius = 10;
		f1.color = "yellow";
		
		Fan f2 = new Fan();
		f2.speed = f2.MEDIUM;
		f2.on = false;
		f2.radius = 5;

		System.out.println( f2 );
		System.out.println( f2.color );
		System.out.println( f2.showFanInfo() );
		
		Account cust01 = new Account();
		cust01.aid = 1122;
		cust01.balance = 20000;
		cust01.interestRate = 4.5F;
		cust01.dateCreated = "2013-11-06 13:15:45";
		System.out.println( cust01.balance );
		cust01.withdraw( 3500 );
		System.out.println( cust01.balance );
		
		Stock iedu = new Stock();
		iedu.sname = "경영기술";
		iedu.previousClosingPrice = 1_000_000;
		iedu.currentPrice = 750_000;
		System.out.println( iedu.getChangePercent() );
		
		iedu.previousClosingPrice = 750_000;
		iedu.currentPrice = 1_500_000;
		System.out.println( iedu.getChangePercent() );
		
	}  // main

}  // class

class Retangle {
	float width = 1.0F;
	float height = 1.0F;
	String color = "white";
	
	float getArea() {
		return (width * height);
	}
	float getPerimeter() {
		return (2 * width + 2 * height);
	}
}

class Fan {
	final int SLOW = 1;
	final int MEDIUM = 2;
	final int FAST = 3;
	
	int speed = SLOW;
	boolean on = false;
	float radius = 5.0F;
	String color = "blue";
	
	String showFanInfo() {
		String msg = "";
		if ( on == true )
			msg = speed + "," + color + "," + radius + "," + "작동중";     
		else 
			msg = color + "," + radius + "," + "꺼져있음";
		return msg;	
	}
}

class Account {
	int aid = 0;
	int balance = 0;
	float interestRate = 0;
	String dateCreated;
	
	float getMonthlyInterestRate() {
		return interestRate / 12;
	}
	
	// int withdraw( int gold ) {
	//	 System.out.println( balance - gold );
	//	 return balance - gold;
	// }
	// call by value 로 인해 예금 금액이 
	// 제대로 차감되지 않음 
	
	int withdraw( int gold ) {
		return balance -= gold;
	}
		
	int deposit( int gold ) {
		return balance += gold;
	}
	
}

class Stock {
	String sname;
	int previousClosingPrice;
	int currentPrice;
	
	float getChangePercent() {
		return (1 - ((float)currentPrice / previousClosingPrice)) * 100;
	}
	
}










